Brouillon avant de compléter ou créer un nouvelle page concernant l'authentification d'un utilisateur avec Samba AD DC
La version actuelle se trouve ici Samba - Active Directory Domain Controller (AD DC) …
…
Avant toute installation, il est nécessaire de définir son environnement. Ainsi, il sera possible de configurer correctement son serveur. Le reste de cette documentation se basera sur les paramètres suivants :
| Nom de domaine | example.com |
| Royaume (realm) | EXAMPLE.COM |
| Nom de NetBIOS | example |
| Nom du serveur | ubndc01 |
| Adresse IP du serveur | 192.168.1.11 |
| Rôle du serveur | DC (contrôleur de domaine) |
…
…
…
…
…
…
…
…
…
…
…
…
…
sudo apt-get install libnss-winbind libpam-winbind winbind
Ajout de winbin dans le fichier de configuration de /etc/nsswitch
...
passwd: compat winbind
group: compat winbind
...
Ceci permet d'utiliser les utilisateurs et groupes venant de AD. Par défaut sur un DC, les commandes ci-dessous retourne la liste de tous les utilisateurs et groupes.
getent passwd getent group
Création du home directory pour l'utilisateur du domaine.
Default: no
Priority: 900
Session-Type: Additional
Session-Final:
required pam_mkhomedir.so skel=/etc/skel umask=0077 silent
Alternative en mofdifiant le fichier /usr/share/pam-config/winbind
...
Session:
optional pam_winbind.so mkhomedir
...
Un autre alternative consiste à monter le home directory de l'utilisateur lors du login. Une option du fichier de configuration /etc/samba/smb.conf est homedir map = auto.home. Ceci fait référence à autofs. Développement Ult.
Possibilité de limiter l'accès à un ou plusieurs groupes ou utilisateurs sur base du SID Ajouter require_membership_of=SID à la fin de la ligne pam_winbind.so de la section Auth: du fichier /usr/share/pam-config/winbind
...
Auth:
[success=end default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass required_membership_of=S-1-5-21-5555555555-555555555-5555555555-512
...
Le RID 512 représente le groupe Domain Admins
Activer cette nouvelle configuration :
sudo pam-auth-update
Deux scripts "maisons" :
#!/bin/bash
# Vérifier si ces valeurs existent dans smb.conf
# idmap config REALM:range = min-max
rangeMin=100000
rangeMax=999999
sam=/var/lib/samba/private/sam.ldb
tmpDir=$(mktemp -d --tmpdir addUid.XXXXXX) || exit 1
umask 0077
ldbsearch -H $sam '(&(objectclass=user)(!(objectclass=computer)))' uidNumber | sed '/^# Referral/ { :loop; N; $! b loop; d; }; s/^\([a-zA-Z0-9]*\): \(.*\)$/\1="\2"/g; /^$/d;' | awk '/^# record/{n++}{print > f n}' f=$tmpDir/r
maxUid=$rangeMin
for file in `grep -l -E "^uidNumber=" $tmpDir/*`
do
source $file
if [ $uidNumber -gt $rangeMax ]
then
echo "Warning: uidNumber $uidNumber for $dn is bigger than max id $rangeMax" 1>&2
elif [ $uidNumber -lt $rangeMin ]
then
echo "Warning: uidNumber $uidNumber for $dn is lower than min id $rangeMin" 1>&2
else
[ $uidNumber -gt $maxUid ] && maxUid=$uidNumber
fi
done
echo "Max UID found: $maxUid"
uidNumber=$(($maxUid+1))
for file in `grep -L -E "^uidNumber=" $tmpDir/*`
do
source $file
echo "Adding uidNumber: $uidNumber for dn: $dn"
echo "dn: $dn
changetype: modify
add: uidNumber
uidNumber: $uidNumber" > $tmpDir/ldif
ldbmodify -H $sam $tmpDir/ldif
uidNumber=$(($uidNumber+1))
done
rm -r $tmpDir
#!/bin/bash # Vérifier si ces valeurs existent dans smb.conf # idmap config REALM:range = min-max rangeMin=100000 rangeMax=999999 sam=/var/lib/samba/private/sam.ldb tmpDir=$(mktemp -d --tmpdir addGid.XXXXXX) || exit 1 umask 0077 ldbsearch -H $sam '(objectclass=group)' gidNumber | sed '/^# Referral/ { :loop; N; $! b loop; d; }; s/^\([a-zA-Z0-9]*\): \(.*\)$/\1="\2"/g; /^$/d;' | awk '/^# record/{n++}{print > f n}' f=$tmpDir/r maxGid=$rangeMin for file in `grep -l -E "^gidNumber=" $tmpDir/*` do source $file if [ $gidNumber -gt $rangeMax ] then echo "Warning: gidNumber $gidNumber for $dn is bigger than max id $rangeMax" 1>&2 elif [ $gidNumber -lt $rangeMin ] then echo "Warning: gidNumber $gidNumber for $dn is lower than min id $rangeMin" 1>&2 else [ $gidNumber -gt $maxGid ] && maxGid=$gidNumber fi done echo "Max GID found: $maxGid" gidNumber=$(($maxGid+1)) for file in `grep -L -E "^gidNumber=" $tmpDir/*` do source $file echo "Adding gidNumber: $gidNumber for dn: $dn" echo "dn: $dn changetype: modify add: gidNumber gidNumber: $gidNumber" > $tmpDir/ldif ldbmodify -H $sam $tmpDir/ldif gidNumber=$(($gidNumber+1)) done rm -r $tmpDir
…